package Demo1_myBatisFirstExample.dao;

import Demo1_myBatisFirstExample.vo.Employee;
import Demo1_myBatisFirstExample.vo.User;
import Demo1_myBatisFirstExample.vo.UserAlias;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public interface UserDao {

    //定义一个添加用户的方法
//    @Insert("insert into user values (#{id},#{name},#{age})")
    public void addUser(User user);

    //一次同时添加多个用户
    public void addMoreUser(List<User> users);

    //添加主键为自增长字段的用户
    public void addUserAutoIncrement(User user);

    //模拟添加自增长主键数据
    public void addUserSimulateAutoIncrement(User user);

    //定义一个修改用户的方法
//    @Update("update user set name=#{name},age=#{age} where id=#{id}")
    public void modifyUser(User user);

    //通过用户id查找唯一的一个用户
//    @Select("select * from user where id=#{id}")
    public User selectUser(int id);

    public UserAlias selectUserAlias(int id);


    public User selectUserByIdAndName(@Param("userId") int id, @Param("userName") String name);

    //根据多个id查询出多个User对象
    public List<User> selectUserByIdsArr(int[] ids_arr);
    public List<User> selectUserByIdsList(@Param("ids") List<Integer> ids_list);

    public List<User> selectUserByIdsMap(Map<String,int[]> ids_map);


    //查找所有用户
    public List<User> selectAllUser();

    //按照参数传递进来的字段名进行排序
    public List<User> selectAllUserOrdered(@Param("field") String field);

    /**
     * 查找 Top N 个用户
     * mapper.xml中返回值类型是map
     *   如果直接以Map接收，必须只能返回一条数据才可以
     *   如果以List<Map>,返回数据的数量可以任意
     * @param count
     * @return
     */
    public List<Map<String,Object>> selectMoreUser(int count);


    //通过用户id删除用户
    public void deleteUser(int id);


    //测试自动映射等级查询所有用户
    public List<User> selectAllUserAutoMapping();

    //按照关键字模糊查找多个用户
    public List<User> selectUsersByLike(@Param("kw") String kw);


}
